package tech.aistar.day07;

import java.util.HashSet;
import java.util.Set;

/**
 * 本类用来演示: 理解hashCode的一个作用
 *
 * @author: success
 * @date: 2022/7/26 10:02 上午
 */
public class SetDemo {
    public static void main(String[] args) {
        //无序不可重复
        Book b1 = new Book(1,"红楼梦",100.0d);
        Book b2 = new Book(2,"三国演义",50.0d);
        Book b3 = new Book(3,"james",80.0d);
        Book b4 = new Book(3,"james",90.0d);

        Set<Book> sets = new HashSet<>();

        //原理:
        //1. 将一个对象加入到容器之前,先去调用该对象的hashCode方法 -> 得到哈希值
        //2. 如果这个哈希值曾经木有出现过,说明容器中的这块地址没有被其他对象占用,就可以直接放入
        //3. 如果这个哈希值曾经出现过 - 产生了哈希碰撞(哈希冲突),此时还不能说明哈希冲突的俩个对象是同一个对象
        //4. 继续调用equals方法.如果返回true,才说明是同一个对象,则拒绝添加入到容器
        sets.add(b1);
        sets.add(b2);
        sets.add(b3);
        sets.add(b4);

        for (Book b : sets) {
            System.out.println(b);
        }
    }
}
